(function (p) {
    // 定义 losu 语言的关键字和语法结构
    p.languages.losu = {
        // 注释
        'comment': {
            pattern: /(^|[^\\])#.*/,
            lookbehind: true
        },

        // 字符串
        'string': {
            pattern: /("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2/,
            greedy: true
        },

        // 多行字符串
        'multiline-string': {
            pattern: /('''|""")((?:\\.|[^\\])*?)\1/s,
            greedy: true,
            alias: 'string'
        },

        // 函数定义
        'function': {
            pattern: /((?:^|\s)func\s+)\w+/,
            lookbehind: true
        },

        // 类定义
        'class-name': {
            pattern: /(\b(?:class|extends)\s+)\w+/,
            lookbehind: true
        },

        // 关键字
        'keyword': /\b(?:if|else|elif|for|while|break|continue|return|func|class|extends|import|from|as|try|except|finally|raise|with|async|await|in|is|and|or|not|def|var|let|const)\b/,

        // 布尔值
        'boolean': /\b(?:true|false|True|False|None)\b/,

        // 数字
        'number': /\b(?:0b[01]+|0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b/i,

        // 操作符
        'operator': /[-+*/%=<>!]=?|\/\/|\*\*|\|\||&&|\^|~|<<>>/,

        // 标点符号
        'punctuation': /[{}[\];(),.:]/,

        // 变量
        'variable': /\b[a-zA-Z_]\w*\b/
    };

    // 同时注册为 losu 语言
    Prism.languages.losu = p.languages.losu;

    

}(Prism));